perm filename EXAM.SAI[PIC,HE] blob sn#430337 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY EXAM
C00008 ENDMK
C⊗;
ENTRY EXAM;
BEGIN "EXAM"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
IFC STANFORD THENC REQUIRE "TENEXIO.SAI" SOURCE!FILE; ENDC
SIMPLE INTERNAL PROCEDURE EXAM(INTEGER CURBUF);
    BEGIN "EXAM"
    STRING PICNAM,WHAT,ANOTHER,SSTR,DIR,CHOICE;
    INTEGER CHANIN,FLG,BUF,ROWNUM,COLUMNS,BYTSIZE,ROWSTR,COLMST,NOROW,NOCOLM,PTR,I,J,SI,SJI,ROWEND,COLEND;
    INTEGER B1,BRCHAR,TIME,SZ,sf1,sf2;
    REAL NUMB;
    time←0;
    getformat(sf1,sf2);
    b1←getbreak;
    clrbrk(b1);
    SETBREAK(B1,"RLUD","RLUD","NI");
    rowstr←colmst←1;    norow←nocolm←15;
    WHILE TRUE DO BEGIN "LOOP"
	BUF←CURBUF;
	BYTSIZE←SZ←BYTSZ(BUF);
	SZ←1+(IF SZ>9 THEN 4 ELSE 3);
	SETFORMAT(SZ,0);
	ROWNUM←ROWS(BUF);
	COLUMNS←COLMS(BUF);
	WHILE TRUE DO BEGIN "MORE"
	iprmpt("STARTING ROW",rowstr);
	iprmpt("NO. OF ROWS",norow);
	iprmpt("STARTING COLUMN",colmst);
	iprmpt("NO. OF COLUMNS",nocolm);
	WHILE TRUE DO BEGIN "CHECK"
	ROWSTR←(ROWSTR MAX 1) MIN ROWNUM;
	COLMST←(COLMST MAX 1) MIN COLUMNS;
	IF ROWSTR+NOROW-1>ROWNUM THEN NOROW←ROWNUM-ROWSTR+1;
	IF COLMST+NOCOLM-1>COLUMNS THEN NOCOLM←COLUMNS-COLMST+1;
	ROWEND←ROWSTR+NOROW-1;
	COLEND←COLMST+NOCOLM-1;
	PRINT("CORNER (I,J)= (",ROWSTR,",",COLMST,")   ",NOROW," X ",NOCOLM,CRLF);
	PRINT(SDUM←"          "[1 TO SZ+1]);
	FOR J←COLMST THRU COLEND DO PRINT(J);
	PRINT(CRLF);
	PRINT(SDUM);
	SDUM←"--------------"[1 TO SZ];
	FOR J←COLMST THRU COLEND DO PRINT(SDUM);
	PRINT(CRLF);
	FOR I←ROWSTR THRU ROWEND DO BEGIN
	    PTR←INPTR(I,COLMST,BUF);
	    PRINT(I,"!");
	    FOR J←COLMST THRU COLEND DO PRINT(ILDB(PTR));
	    PRINT(CRLF);
	    END;
	WHILE TRUE DO BEGIN "CHOICE"
	    PRINT("CHOICE: "); CHOICE←INTTY;
	    IF CHOICE="S" THEN DONE "CHECK"
	    ELSE IF CHOICE=NULL THEN DONE "LOOP"
	    ELSE IF CHOICE="?" THEN PRINT("Info,Pic,Go,Window,Subw,Xdelete",CRLF)
	    ELSE IF CHOICE="I" THEN BEGIN "INFORM"
		PRINT("ROWS=",ROWNUM,"  COLUMNS=",COLUMNS,"  BYTESIZE=",BYTSIZE,CRLF);
		PRINT("ISTART=",ISUBST(BUF),"  JSTART=",JSUBST(BUF),CRLF);
		END "INFORM"
	    ELSE IF CHOICE="P" THEN BEGIN "NEWPIC"
		IF TIME THEN FREBUF(BUF) ELSE TIME←1;
		PRINT("INPUT A PICTURE: ");
		PICNAM←INTTY;
		INDMP(NULL,PICNAM,BUF←FNDBUF,FLG);
		ROWNUM←ROWS(BUF);
		COLUMNS←COLMS(BUF);
		SZ←BYTSIZE←BYTSZ(BUF);
		SZ←1+(IF SZ>9 THEN 4 ELSE 3);
		SETFORMAT(SZ,0);
		END "NEWPIC"
	    ELSE IF CHOICE="G" THEN DONE
	    ELSE IF CHOICE="W" THEN WHILE TRUE DO BEGIN "WINDOW"
		PRINT("DIRECTION: "); DIR←INTTY;
		IF DIR="G" OR DIR=NULL THEN DONE "CHOICE"
		ELSE IF DIR="C" THEN BEGIN
		    iprmpt("NO OF ROWS",NOROW);
		    iprmpt("NO. OF COLUMNS",NOCOLM);
		    END;
		NUMB←REALSCAN(SSTR←SCAN(DIR,B1,BRCHAR),FLG);
		IF NUMB=0.0 THEN NUMB←1.0;
		IF BRCHAR="U" THEN BEGIN "UP"
		    ROWSTR←ROWSTR-NUMB*NOROW+1;
		    END "UP"
		ELSE IF BRCHAR="D" THEN BEGIN "DOWN"
		    ROWSTR←ROWSTR+NUMB*NOROW-1;
		    END "DOWN"
		ELSE IF BRCHAR="L" THEN BEGIN "LEFT"
		    COLMST←COLMST-NOCOLM*NUMB+1;
		    END "LEFT"
		ELSE IF BRCHAR="R" THEN BEGIN "RIGHT"
		    COLMST←COLMST+NOCOLM*NUMB-1;
		    END "RIGHT";
		END "WINDOW"
	    else IF CHOICE="X" THEN BEGIN "DELETE"
		FOR I←ROWSTR THRU (ROWSTR+NOROW-1) DO BEGIN
		    PTR←OUTPTR(I,COLMST,BUF);
		    FOR J←COLMST THRU (COLMST+NOCOLM-1) DO IDPB(0,PTR);
		    END;
		END "DELETE";
	    END "CHOICE";
	END "CHECK";
	END "MORE";
	END "LOOP";
    IF TIME THEN FREBUF(BUF);
    relbreak(B1);
    SETFORMAT(sf1,sf2);
    END "EXAM";
END;